iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
AI & Data

手寫中文字之影像辨識系列 第 12

【第12天】訓練模型-Learning Rate

  • 分享至 

  • xImage
  •  

摘要

  1. 淺談Learning Rate

    1.1 簡介

    1.2 示意圖

  2. Learning Rate的策略(3種)

    2.1 Fixed Learning Rate

    2.2 Reduce Learning Rate

    2.3 Cyclical Learning Rate


內容

  1. 淺談Learning Rate

    1.1 簡介

    • 訓練模型時,以學習率控制模型的學習進度(梯度下降的速度)。
    • 在梯度下降法中,通常依照過去經驗,選擇一個固定的學習率,即固定每個epoch更新權重的幅度。
    • 公式為:新權重 = 舊權重 - 學習率 * 梯度

    1.2 示意圖

    圖片來自於:Aaron Chen-機器學習與深度學習精要

  2. Learning Rate的策略(3種)

    2.1 Fixed Learning Rate

    • 簡介:訓練模型時,採用固定的學習率。

    • 困境:到模型訓練後期,仍使用固定的學習率,會發現收斂速度明顯變慢,且容易找到局部最小值(Local minuma),而非最佳解(Global minima)。如下圖。

      圖片來自於:https://www.twblogs.net/a/5efe3eb9e53eaf40aa872468

    • 範例:Learning Rate固定為0.001

    # 編譯模型
    model.compile(optimizer=Adam(lr=0.001),
                 loss='categorical_crossentropy',
                 metrics=['accuracy'])
    

    2.2 Reduce Learning Rate

    • 簡介:到模型訓練後期,模型逐漸接近全局最小值(Global minima),適度地降低學習率,有助於找到最佳解(Global minima)。

    • 困境:模型仍有可能陷入鞍點(Saddle Point),影響效能。

    • 鞍點(Saddle Point):模型訓練後期,其一階梯度已經趨近0,但是從不同的維度觀察,維度1時,可能是極小值;維度2時,可能是極大值。

      圖片來自於:https://read01.com/PM43jxj.html#.YVGUNZpByUk

    • 常用的衰降方法

      • 分段常數衰減:每訓練n個epoch,就進行一次學習率衰降。
      • 指數衰減:學習率隨著epoch,成指數關係衰降。
      • ReduceLROnPlateau:當模型連續訓練n次沒有更好,就進行一次學習率衰降。

      ※註:詳細說明可參考此處

    • 我們挑選ReduceLROnPlateau進行Reduce Learning Rate,範例如下。

    # 設定lr降低條件(0.001 → 0.005 → 0.0025 → 0.00125 → 下限:0.0001)
    reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.5,
                               patience=5, mode='min', verbose=1,
                               min_lr=1e-4)
    
    # 訓練模型時,以Callbacks監控,呼叫reduce_lr調整Learning Rate值
    history = model.fit_generator(train_generator,
                       epochs=8, verbose=1,
                       steps_per_epoch=train_generator.samples//batch_size,
                       validation_data=valid_generator,
                       validation_steps=valid_generator.samples//batch_size,
                       callbacks=[checkpoint, estop, reduce_lr])
    
    • 參數說明
      • monitor:欲監控的數值。通常使用val_loss或val_acc
      • mode:選擇監控的模式。對應monitor類別,val_loss設定min或val_acc設定max。
      • factor:缩放學習率的常數。訓練模型中,若符合patience條件(如:連續訓練5個epoch後,val_loss未降低),則將原本的學習率值乘以factor,做為新的學習率。
      • patience:若賦值為5,代表模型連續訓練5個epoch後,監控的數值表現沒有更好,就會停止訓練。
      • verbose:用於選擇模型訓練資訊的顯示方式。
      • min_lr:每當符合patience條件,學習率會變動(縮小),min_lr代表學習率的下限。

    2.3 Cyclical Learning Rate

    • 簡介:設定學習率的上下限後,讓學習率在一定範圍內衰降或增加。
    • 優點:訓練模型時,讓學習率在一定範圍內衰降或增加,模型收斂速度快,且有助於逃離鞍點,避免影響模型效能。
    • 範例:需要先定義CLR,請參考Keras Team-cyclical_learning_rate.py
    # 定義CLR後,呼叫CyclicLR
    from clr_callback import CyclicLR
    
    # 設置CyclicLR
    EPOCHS = 8
    test_step_size = (train_generator.samples * EPOCHS) / train_generator.batch_size
    
    # step_size計算公式為train sample size/batch size * p (p為2-10倍)
    step_size = 6000 
    clr = CyclicLR(step_size=test_step_size)
    
    # 訓練模型時,以Callbacks監控,呼叫clr調整Learning Rate值
     history = model.fit_generator(train_generator,
                       epochs=8, 
                       steps_per_epoch=train_generator.samples//batch_size,
                       validation_data=valid_generator,
                       validation_steps=valid_generator.samples//batch_size,
                       callbacks=[checkpoint, estop, clr])
    

小結

  1. 我們在訓練模型時,主要是嘗試與Reduce Learning Rate(ReduceLROnPlateau)與Cyclical Learning Rate,觀察兩者表現。
  2. 下一章,目標是:「探討不同的優化器演算法」。

讓我們繼續看下去...


參考資料

  1. Leslie N. Smith-Cyclical Learning Rates for Training Neural Networks
  2. Keras Team-cyclical_learning_rate.py
  3. CLR論文解析
  4. 【學習率】梯度下降學習率的設定策略

上一篇
【第11天】訓練模型-Keras Application重要函數
下一篇
【第13天】訓練模型-優化器(Optimizer)
系列文
手寫中文字之影像辨識31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言